package org.brisling.base.service;

import java.util.ArrayList;
import java.util.List;

import org.brisling.base.domain.ListDomain;
import org.brisling.base.domain.inf.BaseDomainInf;
import org.brisling.base.repository.BaseDeptRepository;
import org.brisling.common.util.LongUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
/**
 * 
 * 根据部门信息进行数据过滤的业务类方法，需要按照部门信息过滤实体数据的业务必须继承该基类
 * @author : jackson wang
 * @Date   : 2015年6月8日 下午9:47:33
 * @version: 1.0
 * @param <T> 泛型需定义的业务类实体
 */
public class BaseListByDeptService<T extends BaseDomainInf> extends BaseService<T>{

		
		
		protected BaseDeptRepository<T,Long> baseRepo;
		
		
		@Autowired
		protected void setService(BaseDeptRepository<T,Long> baseRepo){
			this.baseRepo = baseRepo;
			super.setService(baseRepo);
		}
			
		
		/**
		 * 
		 * @param uplinkid	分类字段值
		 * @param page		分页号
		 * @param pageSize	每页记录数量
		 * @param repo		仓库类
		 * @return	按照total 及  list封装的返回值（easyui列表页面要求）
		 */
		public ListDomain<T> getPagedListDomainByDeptid(String uplinkid,String page,String pageSize){
			
			Integer _uplinkid = LongUtil.getIntValue(uplinkid, null);
			Integer _page = LongUtil.getIntValue(page, 0);
			Integer _pageSize = LongUtil.getIntValue(pageSize, 10);		
			return this.getPagedListDomainByDeptid(_uplinkid, _page, _pageSize);		
		}
		
		/**
		 * 
		 * @param uplinkid	分类字段值
		 * @param page		分页号
		 * @param pageSize	每页记录数量
		 * @param repo		仓库类
		 * @return	按照total 及  list封装的返回值（easyui列表页面要求）
		 */
		public ListDomain<T> getPagedListDomainByDeptid(Integer uplinkid,String page,String pageSize){		
			Integer _page = LongUtil.getIntValue(page, 0);
			Integer _pageSize = LongUtil.getIntValue(pageSize, 10);		
			return this.getPagedListDomainByDeptid(uplinkid, _page, _pageSize);		
		}
		
		/**
		 * 
		 * @param uplinkid	分类字段值
		 * @param page		分页号
		 * @param pageSize	每页记录数量
		 * @param repo		仓库类
		 * @return	按照total 及  list封装的返回值（easyui列表页面要求）
		 */
		public ListDomain<T> getPagedListDomainByDeptid(Integer uplinkid,Integer page,Integer pageSize){		
			ListDomain<T> listDomain = new ListDomain<T>();
			//dept为空，返回空值对象
			if(uplinkid==null){
				listDomain.setTotal(0l);
				listDomain.setRows(new ArrayList<T>());
				return listDomain;
			}
		
			if(!pageBasedOne)
				page -= 1;
			
			PageRequest _pageRequest = this.getPageRequest(page, pageSize, "sortedid");
					
			
			
			Page<T> _usrList = baseRepo.findByDeptid(new Long(uplinkid), _pageRequest);		
			
			listDomain.setTotal(_usrList.getTotalElements());
			listDomain.setRows(_usrList.getContent());
			
			return listDomain;		
		}
		
		
		/**
		 * 
		 * @param uplinkid	分类字段值
		 * @param page		分页号
		 * @param pageSize	每页记录数量
		 * @param repo		仓库类
		 * @return	按照total 及  list封装的返回值（easyui列表页面要求）
		 */
		public List<T> getPagedListByDeptid(Integer uplinkid,String page,String pageSize,String sort
				){
			
			Integer _page = LongUtil.getIntValue(page, null);
			Integer _pageSize = LongUtil.getIntValue(pageSize, null);
			return this.getPagedListByDeptid(uplinkid, _page, _pageSize, sort);	
		}
		/**
		 * 
		 * @param uplinkid	分类字段值
		 * @param page		分页号
		 * @param pageSize	每页记录数量
		 * @param repo		仓库类
		 * @return	按照total 及  list封装的返回值（easyui列表页面要求）
		 */
		public List<T> getPagedListByDeptid(Integer uplinkid,Integer page,Integer pageSize,String sort){		
			Page<T> _usrList =null;
			
			String _sort = sort == null?"sortedid":sort;
			
			
			
			PageRequest _pageRequest = this.getPageRequest(page, pageSize, _sort);	
			//dept为空，返回空值对象
			if(uplinkid==null){			
				_usrList = baseRepo.findAll(_pageRequest);
			}else{		
				_usrList = baseRepo.findByDeptid(new Long(uplinkid), _pageRequest);				
			}
			return _usrList.getContent();		
		}	
		
}
